From: Andrew Cooper Date: Wed, 31 Jan 2018 10:35:52 +0000 (+0000) Subject: xen/cmdline: Fix parse_boolean() for unadorned values X-Git-Tag: archive/raspbian/4.11.1-1+rpi1~1^2~66^2~661 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=ac37ec1ddef234eeba6f438c29ff687c64962ebd;p=xen.git xen/cmdline: Fix parse_boolean() for unadorned values A command line such as "cpuid=no-ibrsb,no-stibp" tickles a bug in parse_boolean() because the separating comma fails the NUL case. Instead, check for slen == nlen which accounts for the boundary (if any) passed via the 'e' parameter. Signed-off-by: Andrew Cooper Reviewed-by: Jan Beulich --- diff --git a/xen/common/kernel.c b/xen/common/kernel.c index 19f9bad48d..5766a0f784 100644 --- a/xen/common/kernel.c +++ b/xen/common/kernel.c @@ -259,12 +259,16 @@ int parse_boolean(const char *name, const char *s, const char *e) if ( slen < nlen || strncmp(s, name, nlen) ) return -1; - switch ( s[nlen] ) - { - case '\0': return val; - case '=': return parse_bool(&s[nlen + 1], e); - default: return -1; - } + /* Exact, unadorned name? Result depends on the 'no-' prefix. */ + if ( slen == nlen ) + return val; + + /* =$SOMETHING? Defer to the regular boolean parsing. */ + if ( s[nlen] == '=' ) + return parse_bool(&s[nlen + 1], e); + + /* Unrecognised. Give up. */ + return -1; } unsigned int tainted;